Amazon ECSでタスク/イメージの自動クリーンアップが有効になりました
ども、大瀧です。 本日、Amazon ECSの新機能としてタスクおよびイメージの自動クリーンアップがリリースされました。ECSのデフォルトで有効になる機能なのでその設定と留意事項をご紹介します。
自動クリーンアップとは
ECSの自動クリーンアップ機能は、コンテナを実行するEC2インスタンスに溜まりがちな使用済みのDockerコンテナ/Dockerイメージを自動で削除してくれる機能です。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dcb168d6c0ba amazon/amazon-ecs-sample "/usr/sbin/apache2 -D" 20 minutes ago Exited (0) 20 minutes ago ecs-ecscompose-Desktop-1-web-98e5fc86b1bdb785ac01 c1c7e045a64d amazon/amazon-ecs-agent:latest "/agent" 21 minutes ago Up 21 minutes ecs-agent $
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1c7e045a64d amazon/amazon-ecs-agent:latest "/agent" 36 minutes ago Up 36 minutes ecs-agent $
インスタンスのディスク使用量の肥大を抑えてくれる、良い機能ですね。
自動クリーンアップの条件
自動クリーンアップは、コンテナインスタンスで実行されるECSエージェントによって行われるため、エージェントのバージョン要件があります。
- ECSエージェント : バージョン1.13.0以降
エージェントのバージョンが古い場合は、AWSマネージメントコンソールのECSコンテナインスタンスの画面の[Update agent]からアップデートできます。
アップデートを実行すると、以下の1.13.0になりました。
また、クリーンアップは以下のルールで削除が実行されます。
- 終了したタスク(Dockerコンテナ)のうち、終了後3時間経過したもの
- 参照されていないDockerイメージのうち、作成およびPullしてから1時間経過したもの
イメージのクリーンアップはエージェントの定期タスクとして30分に1回、一度に最大5つのイメージが削除されるようになっているので、未参照になって1時間経ったら必ず削除されるとは限りません。
自動クリーンアップの設定
上記条件にあった条件は、ECSエージェントの設定によって変更できます。以下のパラメータが対応します。
- ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION(デフォルト:
3h
) - 停止したタスク(Dockerコンテナ)を削除するまでの待ち時間
- ECS_DISABLE_IMAGE_CLEANUP(デフォルト:
false
) - イメージ削除の無効化
- ECS_IMAGE_CLEANUP_INTERVAL(デフォルト:
30m
) - イメージ削除処理の間隔
- ECS_IMAGE_MINIMUM_CLEANUP_AGE(デフォルト:
1h
) - イメージの最小保持時間
- ECS_NUM_IMAGES_DELETE_PER_CYCLE(デフォルト:
5
) - イメージ削除処理1回につきの削除数
Amazon ECS-Optimized Amazon Linux AMIであれば、/etc/ecs/ecs.config
ファイルに記述し、エージェントないしインスタンスを再起動します。
ECS_CLUSTER=default ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION=30m
クラスタ単位ではなく個々のコンテナインスタンスでの設定になるので、初期設定として入れる場合はユーザーデータやCloudFormationなどで設定を統一する仕組みを検討するのが良いでしょう。
留意事項
自動クリーンアップは、コンテナの検証や頻繁なアップデートなどで使用済みのコンテナが多くできるケース向けに提供されるものです。本番環境やあまりアップデートされない環境、Auto Scalingなどでコンテナインスタンスが頻繁に入れ替わる環境ではあまり効果が見られないかもしれません。また、イメージを事前にPullすることでイメージのダウンロード時間を短くするような構成では、自動クリーンアップによってイメージが削除され、再度Pullが走るということもあると思います。必要に応じて、自動削除の無効化(ECS_DISABLE_IMAGE_CLEANUP
)を検討すると良いと思います。
まとめ
ECSの自動クリーンアップ機能をご紹介しました。Docker界隈ではとんがった新機能が注目されがちですが、運用に役立つこのような機能ももっと注目されると良いのかなと思います。